# -*- coding:utf-8  -*-
# 日期：2018/6/11 7:30
# Author:小鼠标
# 求给定数组任意组合等于一个定值的所有解
list = [1, 2, 3, 4, 5]
val = 10
# 生成等长的全0列表
note_list = [0 for i in range(0, len(list))]


# 递归方法 x 记录列表取跟不取，i表示当前递归的位置，has表示当前所有取的值的和
def get_val(note_list_par, index, array_um):
    if index > len(note_list_par) - 1:
        return
    if array_um + list[index] == val:
        # 符合条件记录
        note_list_par[index] = 1
        print(note_list_par)
        note_list_par[index] = 0
    # 当前位置取 执行一次
    note_list_par[index] = 1
    get_val(note_list_par, index + 1, array_um + list[index])
    # 当前位置不取 执行一次
    note_list_par[index] = 0
    get_val(note_list_par, index + 1, array_um)


get_val(note_list, 0, 0)
